package com.baymax.test.scene.drawable;

import android.content.res.ColorStateList;
import android.util.StateSet;
import android.view.View;

import androidx.annotation.ColorInt;
import androidx.annotation.IntRange;

public class ColorUtils {
    /**
     * 创建具有透明度的颜色值。
     *
     * @param alpha 透明度。
     * @param color 颜色值。
     * @return 具有透明度的颜色值。
     */
    public static int color(@IntRange(from = 0, to = 255) int alpha, @ColorInt int color) {
        return alpha << 24 | 0xffffff & color;
    }

    /**
     * 创建 StateListDrawable 。
     *
     * @return 能够响应状态的 StateListDrawable 。
     * @see android.R.attr#state_focused
     * @see View#isFocused()
     */
    public static ColorStateList createColorStateList(@ColorInt int color) {
        return ColorStateList.valueOf(color);
    }

    /**
     * 创建 StateListDrawable 。
     *
     * @param focusedColor 上焦状态时的颜色。
     * @param normalColor  默认状态的颜色。
     * @return 能够响应状态的 StateListDrawable 。
     * @see android.R.attr#state_focused
     * @see View#isFocused()
     */
    public static ColorStateList createColorStateList(@ColorInt int focusedColor, @ColorInt int normalColor) {
        return new ColorStateList(new int[][]{
                new int[]{android.R.attr.state_focused},
                StateSet.WILD_CARD
        },
                new int[]{focusedColor, normalColor});
    }

    /**
     * 创建 ColorStateList 。
     *
     * @param focusedColor  上焦状态时的颜色。
     * @param selectedColor 选中状态时的颜色。
     * @param normalColor   默认状态的颜色。
     * @return 能够响应状态的 ColorStateList 。
     * @see android.R.attr#state_focused
     * @see android.R.attr#state_selected
     * @see View#isFocused()
     * @see View#setSelected(boolean)
     * @see View#isSelected()
     */
    public static ColorStateList createColorStateList(@ColorInt int focusedColor, @ColorInt int selectedColor, @ColorInt int normalColor) {
        return new ColorStateList(new int[][]{
                new int[]{android.R.attr.state_focused},
                new int[]{android.R.attr.state_selected},
                StateSet.WILD_CARD
        },
                new int[]{focusedColor, selectedColor, normalColor});
    }
}
